package com.desay.pangoo.itmt.service;

import cn.hutool.core.date.DateTime;
import com.desay.pangoo.itmt.controller.vo.contribution.ContributionDateRange;
import com.desay.pangoo.itmt.controller.vo.contribution.ContributionVo;
import com.desay.pangoo.itmt.controller.vo.contribution.req.ContributionReqVo;
import com.desay.pangoo.itmt.entity.MemberContributionEntity;

import java.util.List;

/**
 * 贡献度统计服务
 * @author uids1175
 */
public interface ContributionLevelService {

    /**
     * 计算贡献度
     * @param beginTime
     * @param endTime
     * @return
     */
    ContributionVo calContributionLevel(DateTime beginTime,DateTime endTime);


    /**
     * 利用提案Id，计算一个提案的贡献度并分配给相关的成员
     */
    void addContribution(Long reviewId);

    /**
     * 根据日期返回获取贡献度
     * @param vo
     * @return
     */
    ContributionVo getContributionLevel(ContributionReqVo vo);

    /**
     * 获取持久化数据中最大的日期时间
     * @return
     */
    DateTime getExistedMaxDate();

    /**
     * 获取目前支持检索的贡献度日期
     * @return
     */
    ContributionDateRange getContributionDateRange();

    /**
     * 持久化贡献度
     * @param list
     */
    void saveAll(List<MemberContributionEntity> list);

    /**
     * 每月初，同步计算上个月的成员贡献度，必须保证全部成员的贡献度都计算到，即使成员的贡献度为0
     */
    void calContributionPreMonth(DateTime date);
}
